package com.example.satoken.helper;

import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.convert.Convert;
import com.example.satoken.constants.UserConstants;
import com.example.satoken.entitry.User;
import com.example.satoken.enums.LoginType;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;

/**
 * 登录鉴权助手 方便从Session中拿token信息，不用每次查库，减少数据库压力。
 *
 * @author wpz
 */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class LoginHelper {


    /**
     * 获取用户(多级缓存)
     */
    public static User getLoginUser() {
        User loginUser = (User) StpUtil.getTokenSession().get(UserConstants.LOGIN_USER_KEY);
        if (loginUser == null) {
            return null;
        }
        return loginUser;
    }

    /**
     * 获取用户基于token
     */
    public static User getLoginUser(String token) {
        return (User) StpUtil.getTokenSessionByToken(token).get(UserConstants.LOGIN_USER_KEY);
    }

    /**
     * 获取用户id
     */
    public static Long getUserId() {
        Long userId;
        try {
            User loginUser = (User) StpUtil.getTokenSession().get(UserConstants.LOGIN_USER_KEY);
            userId = Convert.toLong(loginUser.getId());
        } catch (Exception e) {
            return null;
        }
        return userId;
    }


    /**
     * 获取用户账户
     */
    public static String getUsername() {
        return getLoginUser().getUsername();
    }

    /**
     * 获取用户类型
     */
    public static LoginType getUserType(String val) {
        return LoginType.getUserType(val);
    }

    /**
     * 是否为管理员
     *
     * @param userId 用户ID
     * @return 结果
     */
    public static boolean isAdmin(Long userId) {
        return UserConstants.ADMIN_ID.equals(userId);
    }

    public static boolean isAdmin() {
        return isAdmin(getUserId());
    }

}
